package com.java.module.user.service;

import java.util.List;

import com.java.common.lang.domain.entity.User;
import com.java.module.user.domain.dto.*;
import com.java.module.user.domain.vo.UserLoginVO;

/**
 * 用户模块：用户信息Service接口
 * 
 * @author Administrator
 * @date 2021-02-23
 */
public interface IUserService {

    /**
     * 查询用户模块：用户信息
     * 
     * @param uid 用户模块：用户信息ID
     * @return 用户模块：用户信息
     */
    public User selectUserById(Long uid);

    /**
     * 查询用户模块：用户信息列表
     * 
     * @param user 用户模块：用户信息
     * @return 用户模块：用户信息集合
     */
    public List<User> selectUserList(User user);

    /**
     * 新增用户模块：用户信息
     * 
     * @param user 用户模块：用户信息
     * @return 结果
     */
    public int insertUser(User user);

    /**
     * 修改用户模块：用户信息
     * 
     * @param user 用户模块：用户信息
     * @return 结果
     */
    public int updateUser(User user);

    /**
     * 批量删除用户模块：用户信息
     * 
     * @param uids 需要删除的用户模块：用户信息ID
     * @return 结果
     */
    public int deleteUserByIds(Long[] uids);

    /**
     * 删除用户模块：用户信息信息
     * 
     * @param uid 用户模块：用户信息ID
     * @return 结果
     */
    public int deleteUserById(Long uid);

    /**
     * 登录接口
     * 
     * @author yilabao
     * @date 2021年2月3日
     * @param user
     * @return UserLoginVO
     */
    public UserLoginVO login(UserLoginDTO user);

    /**
     * 注销账号
     * 
     * @author yilabao
     * @date 2021年5月10日
     * @return int
     */
    public int cancelAccount();

    /**
     * 发送短信验证码
     *
     * @param sms 短信对象
     * @return
     */
    public int sendSms(SendSmsDTO sms);

    /**
     * 用户注册
     *
     * @param registerUser 用戶注册信息
     * @return
     */
    public int register(RegisterUserDTO registerUser);

    /**
     * 忘记密码
     *
     * @param forgetUser
     * @return
     */
    public int resetLoginPassword(ForgetUserDTO forgetUser);

    /**
     * 修改登录密码
     *
     * @param changeLoginPwd
     * @return
     */
    public int changeLoginPassword(ChangeLoginPwdDTO changeLoginPwd);

    /**
     * 查询个人信息
     * 
     * @author yilabao
     * @date 2021年5月10日
     * @return User
     */
    public User getUserInfo();

    /**
     * 更新个人信息
     * 
     * @author yilabao
     * @date 2021年5月10日
     * @param userInfoDTO
     * @return int
     */
    public int updateUserInfo(UserInfoDTO userInfoDTO);

    int sendSmsCode(SendSmsDTO sms);

    UserLoginVO registerCode(RegisterUserDTO registerUser);

    List<User> selectUserListRandom(User user);

    int updateChangePhone(ChangePhoneDto changePhoneDto);

    User getUserBaseInfo(Long uid);

    int selectCount(User user2);

    User selectUserByCode(String code);
}